// 封装方法引用
import router from '@/router'
import wechatAuth from '@/utils/wechatAuth'
import { getStore, setStore } from '@/utils/wechat/util'
import { CONFIG_STORAGE } from '@/utils/wechat/configs'
import API from '@/api'

// 设置APPID
const WX_APPID = 'wxdfc5b9ea5160e5de' //测试：wx8927a30c77ea29f2  自己真实：wx21de90b889a901e4  pc-bm：wxdfc5b9ea5160e5de
wechatAuth.setAppId(WX_APPID)

router.beforeEach(async (to, from, next) => {
  // 授权态 0为未授权 1为授权返回code 2为使用code获取openid成功
  let authStatus = getStore(CONFIG_STORAGE.AuthStatusKey) // 微信授权状态
  authStatus = authStatus === null || undefined ? 0 : authStatus
  switch (Number(authStatus)) {
    case 0:
      //0 -- 未授权， 获取h5当前页面地址赋值给redirect_uri
      // wechatAuth.redirect_uri = wechatAuth.processUrl() //最初
      // wechatAuth.redirect_uri = "m.buildmost.com"//自己测试
      wechatAuth.redirect_uri = "https://www.buildmost.com/wechat/cn_callback" // pc-bm
      // 更改授权状态为1
      setStore(CONFIG_STORAGE.AuthStatusKey, 1)
      //并调用wechatAuth.authUrl方法打开授权页面同意授权， 跳转到获取code访问链接
      window.location.href = wechatAuth.authUrl
      break
    case 1: {
      // 1 -- 授权页面跳转并返回code，获取code值，returnFromWechat方法对含有code的URL进行处理，wechatAuth.code方法获取code，并且请求后端接口，获取openId
      wechatAuth.returnFromWechat(window.location.href)
      const code = wechatAuth.code
      // 判断code是否存在
      if (!code) {
        setStore(CONFIG_STORAGE.AuthStatusKey, 0)
      }
      // 使用cod换取eopenId
      API.getWxTokenApi({code})
        .then(res => {
          if (res.code === '0') {
            // 获取openId之后存储，并将状态更改为2
            setStore(CONFIG_STORAGE.openId, res.data)
            setStore(CONFIG_STORAGE.AuthStatusKey, 2)
            // 对路由重定向
            window.location.href = `${window.location.origin}${window.location.pathname}/${window.location.hash}`
          } else {
            setStore(CONFIG_STORAGE.AuthStatusKey, 0)
          }
        })
        .catch(err => {
          console.log(err)
          setStore(CONFIG_STORAGE.AuthStatusKey, 0)
        })
      break
    }
      case 2:
      // 2 -- 为使用code获取access_token、openid成功，如果有需要登录的可以在这个地方判断时候是登录态
      // 若openId缺失，状态置为0，去首页重新授权
      if (!getStore(CONFIG_STORAGE.openId)) {
        setStore(CONFIG_STORAGE.AuthStatusKey, 0)
        next('/')
      } else {
        // 判断是否登录，未登录时候去登录页面
        // if (getStore(CONFIG_STORAGE.tokenCode)) {
            next()
        // } else {
            // next('/login')
        // }
      }
      break
    default:
      break
  }
})
